home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 5 / Apprentice-Release5.iso / Source Code / C / Applications / Python 1.3.3 / Python 133 SRC / Modules / environment.c < prev    next >
Text File  |  1995-12-21  |  3KB  |  105 lines

  1. /*
  2. # Copyright 1995, InfoSeek Corporation 
  3. # All rights reserved.
  4. # Written by Andy Bensky
  5. #
  6. # Permission to use, copy, modify, and distribute this Python software
  7. # and its associated documentation for any purpose (subject to the
  8. # restriction in the following sentence) without fee is hereby granted,
  9. # provided that the above copyright notice appears in all copies, and
  10. # that both that copyright notice and this permission notice appear in
  11. # supporting documentation, and that the name of InfoSeek not be used in
  12. # advertising or publicity pertaining to distribution of the software
  13. # without specific, prior written permission.  This permission is
  14. # explicitly restricted to the copying and modification of the software
  15. # to remain in Python, compiled Python, or other languages (such as C)
  16. # wherein the modified or derived code is exclusively imported into a
  17. # Python module.
  18. # INFOSEEK CORPORATION DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS
  19. # SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
  20. # FITNESS. IN NO EVENT SHALL INFOSEEK CORPORATION BE LIABLE FOR ANY
  21. # DIRECT, SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 
  22. # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN 
  23. # AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING 
  24. # OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE, 
  25. # EVEN IF INFOSEEK SHALL HAVE BEEN MADE AWARE OF THE POSSIBILITY OF SUCH
  26. # DAMAGES.
  27. */
  28.  
  29. /* Hooks to call the Unix putenv() to modify the environment
  30. */
  31.  
  32. #include "allobjects.h"
  33. #include <stdlib.h>
  34. #include <assert.h>
  35. #include <string.h>
  36.  
  37. /* Error conditions that can be raised */
  38.  
  39. /* Headers for functions accessible from Python as module methods */
  40. static object *put_environ( object *self, object *args );
  41.  
  42. static struct methodlist environ_methods[] = {
  43.         {"putenv", put_environ},
  44.         {NULL, NULL}
  45. };
  46.  
  47.  
  48. /* 
  49.  * Name: initenvironment
  50.  * Description: 
  51.  *     Initialzation function that Python will use to establish callbacks to
  52.  * the methods of this module.
  53.  * 
  54.  * Returns: 
  55.  *     void  - 
  56.  * 
  57.  * Notes: 
  58.  */ 
  59. void initenvironment()
  60. {
  61.     object *m, *d;
  62.  
  63.     m = initmodule("environment", environ_methods);
  64.     d = getmoduledict(m);
  65. }
  66.    
  67. /* 
  68.  * Name: put_environ
  69.  * Description: 
  70.  * accepts 2 string objects as arguments and forms a string of the
  71.  * form string1=string2 that can be passed to the putenv() system call.
  72.  *
  73.  * Returns: 
  74.  *      None object if successfull, otherwise raises a SystemError exception
  75.  *
  76.  * 
  77.  * Notes: 
  78.  */ 
  79. static object *put_environ( object *self, object *args )
  80. {
  81.         char *string1, *string2;
  82.         char *set_str;
  83.         object *return_object = None;
  84.  
  85.         if (args && getargs(args, "(ss)", &string1, &string2))
  86.         {
  87.             set_str = malloc(strlen(string1) + strlen(string2) + 2);
  88.             assert( set_str );
  89.             (void) sprintf(set_str, "%s=%s", string1, string2);
  90.             if ( putenv( set_str ) )
  91.             {
  92.                 err_setstr(SystemError, "Error in system putenv call.");
  93.                 return_object = 0;
  94.             }
  95.         }
  96.         else
  97.         {
  98.                 err_setstr(TypeError, "Usage: putenv(string1, string2)");
  99.                 return_object = 0;
  100.         }
  101.  
  102.         return( return_object );
  103. }
  104.